package api

import (
	"errors"
	"singo/service"

	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"
)

// ManageProjectList 项目管理列表接口
// @Summary 项目管理列表
// @Router /api/v1/tasks [get]
// @tags 项目管理相关
// @accept application/json
// @Param user_id query string false "关联用户ID"
// @Param organization_id query string false "关联小组ID"
// @Param project_id query string false "关联项目ID"
// @Param status query int false "状态"
// @Param pageNo query int false "页码"
// @Param pageSize query int false "条数"
// @Success 200 {string} json "{"status": 0, "data": {}, "msg": ""}"
func ManageProjectList(c *gin.Context) {
	service := service.ManageProjectService{}
	if err := c.ShouldBind(&service); err == nil {
		res := service.ManageProjectList()
		c.JSON(200, res)
	} else {
		c.JSON(200, ErrorResponse(err))
	}
}

// ManageMemberList 项目管理列表接口
// @Summary 项目管理列表
// @Router /api/v1/tasks [get]
// @tags 项目管理相关
// @accept application/json
// @Param user_id query string false "关联用户ID"
// @Param organization_id query string false "关联小组ID"
// @Param project_id query string false "关联项目ID"
// @Param status query int false "状态"
// @Param pageNo query int false "页码"
// @Param pageSize query int false "条数"
// @Success 200 {string} json "{"status": 0, "data": {}, "msg": ""}"
func ManageMemberList(c *gin.Context) {
	service := service.ManageMemberService{}
	if err := c.ShouldBind(&service); err == nil {
		res := service.ManageMemberList()
		c.JSON(200, res)
	} else {
		c.JSON(200, ErrorResponse(err))
	}
}

// ManageSummaryList 工作总结管理列表接口
// @Summary 工作总结管理列表
// @Router /api/v1/tasks [get]
// @tags 工作总结管理相关
// @accept application/json
// @Param user_id query string false "关联用户ID"
// @Param organization_id query string false "关联小组ID"
// @Param project_id query string false "关联工作总结ID"
// @Param status query int false "状态"
// @Param pageNo query int false "页码"
// @Param pageSize query int false "条数"
// @Success 200 {string} json "{"status": 0, "data": {}, "msg": ""}"
func ManageSummaryList(c *gin.Context) {
	service := service.ManageSummaryService{}
	if err := c.ShouldBind(&service); err == nil {
		res := service.ManageSummaryList()
		c.JSON(200, res)
	} else {
		c.JSON(200, ErrorResponse(err))
	}
}

// ManageTaskCheckList 待审核已审核管理列表接口
// @Summary 待审核已审核管理列表
// @Router /api/v1/tasks [get]
// @tags 待审核已审核管理相关
// @accept application/json
// @Param user_id query string false "关联用户ID"
// @Param organization_id query string false "关联小组ID"
// @Param project_id query string false "关联待审核已审核ID"
// @Param status query int false "状态"
// @Param pageNo query int false "页码"
// @Param pageSize query int false "条数"
// @Success 200 {string} json "{"status": 0, "data": {}, "msg": ""}"
func ManageTaskCheckList(c *gin.Context) {
	service := service.ManageTaskCheckService{}
	session := sessions.Default(c)
	userUID := session.Get("user_uid")
	if userUID == nil {
		c.JSON(200, ErrorResponse(errors.New("不存在此用户信息")))
		return
	}
	if err := c.ShouldBind(&service); err == nil {
		res := service.ManageTaskCheckList(userUID.(string))
		c.JSON(200, res)
	} else {
		c.JSON(200, ErrorResponse(err))
	}
}

// TaskCheck 更新任务接口
// @Summary 更新任务
// @Router /api/v1/task/{id} [put]
// @tags 任务相关
// @accept application/json
// @Param id path string false "任务ID"
// @Param name query string false "任务名称"
// @Param intro query string false "任务介绍"
// @Param priority query int false "优先级"
// @Param status query int false "状态"
// @Param project_id query string false "关联项目ID"
// @Param organization_id query string false "关联组织ID"
// @Param execute_by query string false "执行人"
// @Param deadline_at query string false "截止日期"
// @Success 200 {string} json "{"status": 0, "data": {}, "msg": ""}"
func TaskCheck(c *gin.Context) {
	service := service.TaskCheckService{}
	if err := c.ShouldBind(&service); err == nil {
		res := service.TaskCheck()
		c.JSON(200, res)
	} else {
		c.JSON(200, ErrorResponse(err))
	}
}
